package org.jeecg.modules.framework.modules.member.serviceimpl;


//import cn.hutool.core.convert.Convert;
//import cn.hutool.core.text.CharSequenceUtil;
//import org.jeecg.modules.framework.cache.Cache;
//import org.jeecg.modules.framework.cache.CachePrefix;
//import org.jeecg.modules.framework.common.aop.annotation.DemoSite;
//import org.jeecg.modules.framework.common.context.ThreadContextHolder;
//import org.jeecg.modules.framework.common.enums.ResultCode;
//import org.jeecg.modules.framework.common.enums.SwitchEnum;
//import org.jeecg.modules.framework.common.event.TransactionCommitSendMQEvent;
//import org.jeecg.modules.framework.common.exception.ServiceException;
//import org.jeecg.modules.framework.common.properties.RocketmqCustomProperties;
//import org.jeecg.modules.framework.common.security.AuthUser;
//import org.jeecg.modules.framework.common.security.context.UserContext;
//import org.jeecg.modules.framework.common.security.enums.UserEnums;
//import org.jeecg.modules.framework.common.security.token.Token;
//import org.jeecg.modules.framework.common.sensitive.SensitiveWordsFilter;
//import org.jeecg.modules.framework.common.utils.*;
//import org.jeecg.modules.framework.common.vo.PageVO;
//import org.jeecg.modules.framework.modules.connect.entity.Connect;
//import org.jeecg.modules.framework.modules.connect.entity.dto.ConnectAuthUser;
//import org.jeecg.modules.framework.modules.connect.service.ConnectService;
//import org.jeecg.modules.framework.modules.member.aop.annotation.PointLogPoint;
import org.jeecg.modules.framework.modules.member.entity.dos.Member;
//import org.jeecg.modules.framework.modules.member.entity.dto.*;
//import org.jeecg.modules.framework.modules.member.entity.enums.QRCodeLoginSessionStatusEnum;
//import org.jeecg.modules.framework.modules.member.entity.vo.MemberSearchVO;
//import org.jeecg.modules.framework.modules.member.entity.vo.MemberVO;
//import org.jeecg.modules.framework.modules.member.entity.vo.QRCodeLoginSessionVo;
//import org.jeecg.modules.framework.modules.member.entity.vo.QRLoginResultVo;
import org.jeecg.modules.framework.modules.member.mapper.MemberMapper;
import org.jeecg.modules.framework.modules.member.service.MemberService;
//import org.jeecg.modules.framework.modules.member.token.MemberTokenGenerate;
//import org.jeecg.modules.framework.modules.member.token.StoreTokenGenerate;
//import org.jeecg.modules.framework.modules.store.entity.enums.StoreStatusEnum;
//import org.jeecg.modules.framework.mybatis.util.PageUtil;
//import org.jeecg.modules.framework.rocketmq.RocketmqSendCallbackBuilder;
//import org.jeecg.modules.framework.rocketmq.tags.MemberTagsEnum;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import org.apache.rocketmq.spring.core.RocketMQTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.ApplicationEventPublisher;
//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;

//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//import java.util.Objects;
//import java.util.concurrent.TimeUnit;

/**
 * 会员接口业务层实现
 *
 * @author Chopper
 * @since 2021-03-29 14:10:16
 */
@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
//cny del
//    /**
//     * 会员token
//     */
//    @Autowired
//    private MemberTokenGenerate memberTokenGenerate;
//    /**
//     * 商家token
//     */
//    @Autowired
//    private StoreTokenGenerate storeTokenGenerate;
//    /**
//     * 联合登录
//     */
//    @Autowired
//    private ConnectService connectService;
//    /**
//     * 店铺
//     */
//    @Autowired
//    private StoreService storeService;
//    /**
//     * RocketMQ 配置
//     */
//    @Autowired
//    private RocketmqCustomProperties rocketmqCustomProperties;
//
//    @Autowired
//    private RocketMQTemplate rocketMQTemplate;
//
//    @Autowired
//    private ApplicationEventPublisher applicationEventPublisher;
//    /**
//     * 缓存
//     */
//    @Autowired
//    private Cache cache;
//
//    @Override
//    public Member findByUsername(String userName) {
//        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("username", userName);
//        return this.baseMapper.selectOne(queryWrapper);
//    }
//
//
//    @Override
//    public Member getUserInfo() {
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser != null) {
//            return this.findByUsername(tokenUser.getUsername());
//        }
//        throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//    }
//
//    @Override
//    public Member findByMobile(String mobile) {
//        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("mobile", mobile);
//        return this.baseMapper.selectOne(queryWrapper);
//    }
//
//    @Override
//    public boolean findByMobile(String uuid, String mobile) {
//        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("mobile", mobile);
//        Member member = this.baseMapper.selectOne(queryWrapper);
//        if (member == null) {
//            throw new ServiceException(ResultCode.USER_NOT_PHONE);
//        }
//        cache.put(CachePrefix.FIND_MOBILE + uuid, mobile, 300L);
//
//        return true;
//    }
//
//    @Override
//    public Token usernameLogin(String username, String password) {
//        Member member = this.findMember(username);
//        //判断用户是否存在
//        if (member == null || !member.getDisabled()) {
//            throw new ServiceException(ResultCode.USER_NOT_EXIST);
//        }
//        //判断密码是否输入正确
//        if (!new BCryptPasswordEncoder().matches(password, member.getPassword())) {
//            throw new ServiceException(ResultCode.USER_PASSWORD_ERROR);
//        }
//        loginBindUser(member);
//        return memberTokenGenerate.createToken(member, false);
//    }
//
//
//    @Override
//    public void resetPassword(List<String> ids) {
//        String password = new BCryptPasswordEncoder().encode(StringUtils.md5("123456"));
//        LambdaUpdateWrapper<Member> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
//        lambdaUpdateWrapper.in(Member::getId, ids);
//        lambdaUpdateWrapper.set(Member::getPassword, password);
//        this.update(lambdaUpdateWrapper);
//    }
//
//    @Override
//    public void updateHaveShop(Boolean haveStore, String storeId, List<String> memberIds) {
//        List<Member> members = this.baseMapper.selectBatchIds(memberIds);
//        if (members.size() > 0) {
//            members.forEach(member -> {
//                member.setHaveStore(haveStore);
//                if (haveStore) {
//                    member.setStoreId(storeId);
//                } else {
//                    member.setStoreId(null);
//                }
//            });
//            this.updateBatchById(members);
//        }
//    }
//
//    @Override
//    public Token usernameStoreLogin(String username, String password) {
//
//        Member member = this.findMember(username);
//        //判断用户是否存在
//        if (member == null || !member.getDisabled()) {
//            throw new ServiceException(ResultCode.USER_NOT_EXIST);
//        }
//        //判断密码是否输入正确
//        if (!new BCryptPasswordEncoder().matches(password, member.getPassword())) {
//            throw new ServiceException(ResultCode.USER_PASSWORD_ERROR);
//        }
//        //对店铺状态的判定处理
//        return checkMemberStore(member);
//    }
//
//    @Override
//    public Token mobilePhoneStoreLogin(String mobilePhone) {
//        Member member = this.findMember(mobilePhone);
//        //如果手机号不存在则自动注册用户
//        if (member == null) {
//            throw new ServiceException(ResultCode.USER_NOT_EXIST);
//        }
//        loginBindUser(member);
//        //对店铺状态的判定处理
//        return checkMemberStore(member);
//    }
//
//    private Token checkMemberStore(Member member) {
//        if (Boolean.TRUE.equals(member.getHaveStore())) {
//            Store store = storeService.getById(member.getStoreId());
//            if (!store.getStoreDisable().equals(StoreStatusEnum.OPEN.name())) {
//                throw new ServiceException(ResultCode.STORE_CLOSE_ERROR);
//            }
//        } else {
//            throw new ServiceException(ResultCode.USER_NOT_EXIST);
//        }
//        return storeTokenGenerate.createToken(member, false);
//    }
//
//    /**
//     * 传递手机号或者用户名
//     *
//     * @param userName 手机号或者用户名
//     * @return 会员信息
//     */
//    private Member findMember(String userName) {
//        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("username", userName).or().eq("mobile", userName);
//        return this.getOne(queryWrapper);
//    }
//
//    @Override
//    @Transactional
//    public Member autoRegister(ConnectAuthUser authUser) {
//
//        if (CharSequenceUtil.isEmpty(authUser.getNickname())) {
//            authUser.setNickname(CommonUtil.getSpecialStr("用户"));
//        }
//        if (CharSequenceUtil.isEmpty(authUser.getAvatar())) {
//            authUser.setAvatar("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png");
//        }
//        try {
////            String username = UuidUtils.getUUID();
//            Member member = new Member(authUser.getUsername(), UuidUtils.getUUID(), authUser.getAvatar(), authUser.getNickname(),
//                    authUser.getGender() != null ? Convert.toInt(authUser.getGender().getCode()) : 0, authUser.getPhone());
//            member.setPassword(DEFAULT_PASSWORD);
//            // 发送会员注册信息
//            registerHandler(member);
//
//            return member;
//        } catch (ServiceException e) {
//            log.error("自动注册服务抛出异常：", e);
//            throw e;
//        } catch (Exception e) {
//            log.error("自动注册异常：", e);
//            throw new ServiceException(ResultCode.USER_AUTO_REGISTER_ERROR);
//        }
//    }
//
////    @Override
////    @Transactional
////    public Token autoRegister() {
////        ConnectAuthUser connectAuthUser = this.checkConnectUser();
////        return this.autoRegister(connectAuthUser);
////    }
//
//    @Override
//    public Token refreshToken(String refreshToken) {
//        return memberTokenGenerate.refreshToken(refreshToken);
//    }
//
//    @Override
//    public Token refreshStoreToken(String refreshToken) {
//        return storeTokenGenerate.refreshToken(refreshToken);
//    }
//
//    @Override
//    @Transactional
//    public Token mobilePhoneLogin(String mobilePhone) {
//        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("mobile", mobilePhone);
//        Member member = this.baseMapper.selectOne(queryWrapper);
//        //如果手机号不存在则自动注册用户
//        if (member == null) {
//            member = new Member(mobilePhone, UuidUtils.getUUID(), mobilePhone);
//            registerHandler(member);
//        }
//        //判断用户是否有效
//        if (member.getDisabled().equals(false) || member.getDelFlag().equals(0)) {
//            throw new ServiceException(ResultCode.USER_STATUS_ERROR);
//        }
//        loginBindUser(member);
//        return memberTokenGenerate.createToken(member, false);
//    }
//
//    /**
//     * 注册方法抽象
//     *
//     * @param member
//     */
//    @Transactional
//    public void registerHandler(Member member) {
//        member.setId(SnowFlake.getIdStr());
//        //保存会员
//        this.save(member);
//        UserContext.settingInviter(member.getId(), cache);
//        // 发送会员注册信息
//        applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("new member register", rocketmqCustomProperties.getMemberTopic(),
//                MemberTagsEnum.MEMBER_REGISTER.name(), member));
//    }
//
//    @Override
//    public Member editOwn(MemberEditDTO memberEditDTO) {
//        //查询会员信息
//        Member member = this.findByUsername(Objects.requireNonNull(UserContext.getCurrentUser()).getUsername());
//        //传递修改会员信息
//        BeanUtil.copyProperties(memberEditDTO, member);
//        //修改会员
//        this.updateById(member);
//        String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_INFO_EDIT.name();
//        //发送订单变更mq消息
//        rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
//        return member;
//    }
//
//    @DemoSite
//    public Member modifyPass(String oldPassword, String newPassword) {
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser == null) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        Member member = this.getById(tokenUser.getId());
//        //判断旧密码输入是否正确
//        if (!new BCryptPasswordEncoder().matches(oldPassword, member.getPassword())) {
//            throw new ServiceException(ResultCode.USER_OLD_PASSWORD_ERROR);
//        }
//        //修改会员密码
//        LambdaUpdateWrapper<Member> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
//        lambdaUpdateWrapper.eq(Member::getId, member.getId());
//        lambdaUpdateWrapper.set(Member::getPassword, new BCryptPasswordEncoder().encode(newPassword));
//        this.update(lambdaUpdateWrapper);
//        return member;
//    }
//
//    @Override
//    public boolean canInitPass() {
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser == null) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        Member member = this.getById(tokenUser.getId());
//        return member.getPassword().equals(DEFAULT_PASSWORD);
//
//    }
//
//    @Override
//    public void initPass(String password) {
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser == null) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        Member member = this.getById(tokenUser.getId());
//        if (member.getPassword().equals(DEFAULT_PASSWORD)) {
//            //修改会员密码
//            LambdaUpdateWrapper<Member> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
//            lambdaUpdateWrapper.eq(Member::getId, member.getId());
//            lambdaUpdateWrapper.set(Member::getPassword, new BCryptPasswordEncoder().encode(password));
//            this.update(lambdaUpdateWrapper);
//        }
//        throw new ServiceException(ResultCode.UNINITIALIZED_PASSWORD);
//
//    }
//
//    @Override
//    public void cancellation() {
//
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser == null) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        Member member = this.getById(tokenUser.getId());
//        //删除联合登录
//        connectService.deleteByMemberId(member.getId());
//        //混淆用户信息
//        this.confusionMember(member);
//    }
//
//    /**
//     * 混淆之前的会员信息
//     *
//     * @param member
//     */
//    private void confusionMember(Member member) {
//        member.setUsername(UuidUtils.getUUID());
//        member.setMobile(UuidUtils.getUUID() + member.getMobile());
//        member.setNickName("用户已注销");
//        member.setDisabled(false);
//        this.updateById(member);
//    }
//
//    @Override
//    @Transactional
//    public Token register(String userName, String password, String mobilePhone) {
//        //检测会员信息
//        checkMember(userName, mobilePhone);
//        //设置会员信息
//        Member member = new Member(userName, new BCryptPasswordEncoder().encode(password), mobilePhone);
//        //注册成功后用户自动登录
//        registerHandler(member);
//        return memberTokenGenerate.createToken(member, false);
//    }
//
//    @Override
//    public boolean changeMobile(String mobile) {
//        AuthUser tokenUser = Objects.requireNonNull(UserContext.getCurrentUser());
//        Member member = this.findByUsername(tokenUser.getUsername());
//
//        //判断是否用户登录并且会员ID为当前登录会员ID
//        if (!Objects.equals(tokenUser.getId(), member.getId())) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        //修改会员手机号
//        LambdaUpdateWrapper<Member> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
//        lambdaUpdateWrapper.eq(Member::getId, member.getId());
//        lambdaUpdateWrapper.set(Member::getMobile, mobile);
//        return this.update(lambdaUpdateWrapper);
//    }
//
//    @Override
//    public boolean changeMobile(String memberId, String mobile) {
//        //修改会员手机号
//        LambdaUpdateWrapper<Member> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
//        lambdaUpdateWrapper.eq(Member::getId, memberId);
//        lambdaUpdateWrapper.set(Member::getMobile, mobile);
//        return this.update(lambdaUpdateWrapper);
//    }
//
//    @Override
//    public boolean resetByMobile(String uuid, String password) {
//        String phone = cache.get(CachePrefix.FIND_MOBILE + uuid).toString();
//        //根据手机号获取会员判定是否存在此会员
//        if (phone != null) {
//            //修改密码
//            LambdaUpdateWrapper<Member> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
//            lambdaUpdateWrapper.eq(Member::getMobile, phone);
//            lambdaUpdateWrapper.set(Member::getPassword, new BCryptPasswordEncoder().encode(password));
//            cache.remove(CachePrefix.FIND_MOBILE + uuid);
//            return this.update(lambdaUpdateWrapper);
//        } else {
//            throw new ServiceException(ResultCode.USER_PHONE_NOT_EXIST);
//        }
//
//    }
//
//    @Override
//    @Transactional
//    public Member addMember(MemberAddDTO memberAddDTO) {
//
//        //检测会员信息
//        checkMember(memberAddDTO.getUsername(), memberAddDTO.getMobile());
//
//        //添加会员
//        Member member = new Member(memberAddDTO.getUsername(), new BCryptPasswordEncoder().encode(memberAddDTO.getPassword()),
//                memberAddDTO.getMobile());
//        registerHandler(member);
//        return member;
//    }
//
//    @Override
//    public Member updateMember(ManagerMemberEditDTO managerMemberEditDTO) {
//        //过滤会员昵称敏感词
//        if (CharSequenceUtil.isNotBlank(managerMemberEditDTO.getNickName())) {
//            managerMemberEditDTO.setNickName(SensitiveWordsFilter.filter(managerMemberEditDTO.getNickName()));
//        }
//        //如果密码不为空则加密密码
//        if (CharSequenceUtil.isNotBlank(managerMemberEditDTO.getPassword())) {
//            managerMemberEditDTO.setPassword(new BCryptPasswordEncoder().encode(managerMemberEditDTO.getPassword()));
//        }
//        //查询会员信息
//        Member member = this.getById(managerMemberEditDTO.getId());
//        //传递修改会员信息
//        BeanUtil.copyProperties(managerMemberEditDTO, member);
//        this.updateById(member);
//        return member;
//    }
//
//    @Override
//    public IPage<MemberVO> getMemberPage(MemberSearchVO memberSearchVO, PageVO page) {
//        QueryWrapper<Member> queryWrapper = Wrappers.query();
//        //用户名查询
//        queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername());
//        //用户名查询
//        queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName());
//        //按照电话号码查询
//        queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile());
//        //按照会员状态查询
//        queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled",
//                memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0);
//        queryWrapper.orderByDesc("create_time");
//        return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper);
//    }
//
//    @Override
//    @PointLogPoint
//    @Transactional(rollbackFor = Exception.class)
//    public Boolean updateMemberPoint(Long point, String type, String memberId, String content) {
//        //获取当前会员信息
//        Member member = this.getById(memberId);
//        if (member != null) {
//            //积分变动后的会员积分
//            long currentPoint;
//            //会员总获得积分
//            long totalPoint = member.getTotalPoint();
//            //如果增加积分
//            if (type.equals(PointTypeEnum.INCREASE.name())) {
//                currentPoint = member.getPoint() + point;
//                //如果是增加积分 需要增加总获得积分
//                totalPoint = totalPoint + point;
//            }
//            //否则扣除积分
//            else {
//                currentPoint = member.getPoint() - point < 0 ? 0 : member.getPoint() - point;
//            }
//            member.setPoint(currentPoint);
//            member.setTotalPoint(totalPoint);
//            boolean result = this.updateById(member);
//            if (result) {
//                //发送会员消息
//                MemberPointMessage memberPointMessage = new MemberPointMessage();
//                memberPointMessage.setPoint(point);
//                memberPointMessage.setType(type);
//                memberPointMessage.setMemberId(memberId);
//                applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("update member point",
//                        rocketmqCustomProperties.getMemberTopic(), MemberTagsEnum.MEMBER_POINT_CHANGE.name(), memberPointMessage));
//                return true;
//            }
//            return false;
//
//        }
//        throw new ServiceException(ResultCode.USER_NOT_EXIST);
//    }
//
//    @Override
//    public Boolean updateMemberStatus(List<String> memberIds, Boolean status) {
//        UpdateWrapper<Member> updateWrapper = Wrappers.update();
//        updateWrapper.set("disabled", status);
//        updateWrapper.in("id", memberIds);
//
//        //如果是禁用
//        if (Boolean.FALSE.equals(status)) {
//            disableMemberLogout(memberIds);
//        }
//        return this.update(updateWrapper);
//    }
//
//    /**
//     * 根据手机号获取会员
//     *
//     * @param mobilePhone 手机号
//     * @return 会员
//     */
//    private Long findMember(String mobilePhone, String userName) {
//        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("mobile", mobilePhone)
//                .or().eq("username", userName);
//        return this.baseMapper.selectCount(queryWrapper);
//    }
//
//    /**
//     * 获取cookie中的联合登录对象
//     *
//     * @param uuid uuid
//     * @param type 状态
//     * @return cookie中的联合登录对象
//     */
//    private ConnectAuthUser getConnectAuthUser(String uuid, String type) {
//        Object context = cache.get(ConnectService.cacheKey(type, uuid));
//        if (context != null) {
//            return (ConnectAuthUser) context;
//        }
//        return null;
//    }
//
//    /**
//     * 成功登录，则检测cookie中的信息，进行会员绑定
//     *
//     * @param member 会员
//     */
//    private void loginBindUser(Member member) {
//        //获取cookie存储的信息
//        String uuid = CookieUtil.getCookie(ConnectService.CONNECT_COOKIE, ThreadContextHolder.getHttpRequest());
//        String connectType = CookieUtil.getCookie(ConnectService.CONNECT_TYPE, ThreadContextHolder.getHttpRequest());
//        //如果联合登陆存储了信息
//        if (CharSequenceUtil.isNotEmpty(uuid) && CharSequenceUtil.isNotEmpty(connectType)) {
//            try {
//                //获取信息
//                ConnectAuthUser connectAuthUser = getConnectAuthUser(uuid, connectType);
//                if (connectAuthUser == null) {
//                    return;
//                }
//                Connect connect = connectService.queryConnect(
//                        ConnectQueryDTO.builder().unionId(connectAuthUser.getUuid()).unionType(connectType).build()
//                );
//                if (connect == null) {
//                    connect = new Connect(member.getId(), connectAuthUser.getUuid(), connectType);
//                    connectService.save(connect);
//                }
//            } catch (ServiceException e) {
//                throw e;
//            } catch (Exception e) {
//                log.error("绑定第三方联合登陆失败：", e);
//            } finally {
//                //联合登陆成功与否，都清除掉cookie中的信息
//                CookieUtil.delCookie(ConnectService.CONNECT_COOKIE, ThreadContextHolder.getHttpResponse());
//                CookieUtil.delCookie(ConnectService.CONNECT_TYPE, ThreadContextHolder.getHttpResponse());
//            }
//        }
//
//    }
//
//
////    /**
////     * 检测是否可以绑定第三方联合登陆
////     * 返回null原因
////     * 包含原因1：redis中已经没有联合登陆信息  2：已绑定其他账号
////     *
////     * @return 返回对象则代表可以进行绑定第三方会员，返回null则表示联合登陆无法继续
////     */
////    private ConnectAuthUser checkConnectUser() {
////        //获取cookie存储的信息
////        String uuid = CookieUtil.getCookie(ConnectService.CONNECT_COOKIE, ThreadContextHolder.getHttpRequest());
////        String connectType = CookieUtil.getCookie(ConnectService.CONNECT_TYPE, ThreadContextHolder.getHttpRequest());
////
////        //如果联合登陆存储了信息
////        if (CharSequenceUtil.isNotEmpty(uuid) && CharSequenceUtil.isNotEmpty(connectType)) {
////            //枚举 联合登陆类型获取
////            ConnectAuthEnum authInterface = ConnectAuthEnum.valueOf(connectType);
////
////            ConnectAuthUser connectAuthUser = getConnectAuthUser(uuid, connectType);
////            if (connectAuthUser == null) {
////                throw new ServiceException(ResultCode.USER_OVERDUE_CONNECT_ERROR);
////            }
////            //检测是否已经绑定过用户
////            Connect connect = connectService.queryConnect(
////                    ConnectQueryDTO.builder().unionType(connectType).unionId(connectAuthUser.getUuid()).build()
////            );
////            //没有关联则返回true，表示可以继续绑定
////            if (connect == null) {
////                connectAuthUser.setConnectEnum(authInterface);
////                return connectAuthUser;
////            } else {
////                throw new ServiceException(ResultCode.USER_CONNECT_BANDING_ERROR);
////            }
////        } else {
////            throw new ServiceException(ResultCode.USER_CONNECT_NOT_EXIST_ERROR);
////        }
////    }
//
//    @Override
//    public long getMemberNum(MemberSearchVO memberSearchVO) {
//        QueryWrapper<Member> queryWrapper = Wrappers.query();
//        //用户名查询
//        queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername());
//        //按照电话号码查询
//        queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile());
//        //按照状态查询
//        queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled",
//                memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0);
//        queryWrapper.orderByDesc("create_time");
//        return this.count(queryWrapper);
//    }
//
//    /**
//     * 获取指定会员数据
//     *
//     * @param columns   指定获取的列
//     * @param memberIds 会员ids
//     * @return 指定会员数据
//     */
//    @Override
//    public List<Map<String, Object>> listFieldsByMemberIds(String columns, List<String> memberIds) {
//        return this.listMaps(new QueryWrapper<Member>()
//                .select(columns)
//                .in(memberIds != null && !memberIds.isEmpty(), "id", memberIds));
//    }
//
//    /**
//     * 登出
//     */
//    @Override
//    public void logout(UserEnums userEnums) {
//        String currentUserToken = UserContext.getCurrentUserToken();
//
//        AuthUser authUser = UserContext.getAuthUser(currentUserToken);
//
//        if (CharSequenceUtil.isNotEmpty(currentUserToken)) {
//            cache.remove(CachePrefix.ACCESS_TOKEN.getPrefix(userEnums, authUser.getId()) + currentUserToken);
//            cache.vagueDel(CachePrefix.REFRESH_TOKEN.getPrefix(userEnums, authUser.getId()));
//        }
//    }
//
//    @Override
//    public void logout(String userId) {
//
//        cache.vagueDel(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MANAGER, userId));
//        cache.vagueDel(CachePrefix.REFRESH_TOKEN.getPrefix(UserEnums.MANAGER, userId));
//    }
//
//    /**
//     * 禁用会员会员token删除
//     *
//     * @param memberIds 会员id
//     */
//    public void disableMemberLogout(List<String> memberIds) {
//        if (memberIds != null) {
//            memberIds.forEach(memberId -> {
//                cache.vagueDel(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER, memberId));
//                cache.vagueDel(CachePrefix.REFRESH_TOKEN.getPrefix(UserEnums.MEMBER, memberId));
//            });
//        }
//    }
//
//    /**
//     * 获取所有会员的手机号
//     *
//     * @return 所有会员的手机号
//     */
//    @Override
//    public List<String> getAllMemberMobile() {
//        return this.baseMapper.getAllMemberMobile();
//    }
//
//    /**
//     * 更新会员登录时间为最新时间
//     *
//     * @param memberId 会员id
//     * @return 是否更新成功
//     */
//    @Override
//    public boolean updateMemberLoginTime(String memberId) {
//        LambdaUpdateWrapper<Member> updateWrapper = new LambdaUpdateWrapper<>();
//        updateWrapper.eq(Member::getId, memberId);
//        updateWrapper.set(Member::getLastLoginDate, new Date());
//        return this.update(updateWrapper);
//    }
//
//    @Override
//    public MemberVO getMember(String id) {
//        return new MemberVO(this.getById(id));
//    }
//
//    @Override
//    public QRCodeLoginSessionVo createPcSession() {
//        QRCodeLoginSessionVo session = new QRCodeLoginSessionVo();
//        session.setStatus(QRCodeLoginSessionStatusEnum.WAIT_SCANNING.getCode());
//        //过期时间，20s
//        Long duration = 20 * 1000L;
//        session.setDuration(duration);
//        String token = CachePrefix.QR_CODE_LOGIN_SESSION.name() + SnowFlake.getIdStr();
//        session.setToken(token);
//        cache.put(token, session, duration, TimeUnit.MILLISECONDS);
//        return session;
//    }
//
//    @Override
//    public Object appScanner(String token) {
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser == null) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        QRCodeLoginSessionVo session = (QRCodeLoginSessionVo) cache.get(token);
//        if (session == null) {
//            return QRCodeLoginSessionStatusEnum.NO_EXIST.getCode();
//        }
//        session.setStatus(QRCodeLoginSessionStatusEnum.SCANNING.getCode());
//        cache.put(token, session, session.getDuration(), TimeUnit.MILLISECONDS);
//        return QRCodeLoginSessionStatusEnum.SCANNING.getCode();
//    }
//
//    @Override
//    public boolean appSConfirm(String token, Integer code) {
//        AuthUser tokenUser = UserContext.getCurrentUser();
//        if (tokenUser == null) {
//            throw new ServiceException(ResultCode.USER_NOT_LOGIN);
//        }
//        QRCodeLoginSessionVo session = (QRCodeLoginSessionVo) cache.get(token);
//        if (session == null) {
//            return false;
//        }
//        if (code == 1) {
//            //同意
//            session.setStatus(QRCodeLoginSessionStatusEnum.VERIFIED.getCode());
//            session.setUserId(Long.parseLong(tokenUser.getId()));
//        } else {
//            //拒绝
//            session.setStatus(QRCodeLoginSessionStatusEnum.CANCELED.getCode());
//        }
//        cache.put(token, session, session.getDuration(), TimeUnit.MILLISECONDS);
//        return true;
//    }
//
//    @Override
//    public QRLoginResultVo loginWithSession(String sessionToken) {
//        QRLoginResultVo result = new QRLoginResultVo();
//        result.setStatus(QRCodeLoginSessionStatusEnum.NO_EXIST.getCode());
//        QRCodeLoginSessionVo session = (QRCodeLoginSessionVo) cache.get(sessionToken);
//        if (session == null) {
//            return result;
//        }
//        result.setStatus(session.getStatus());
//        if (QRCodeLoginSessionStatusEnum.VERIFIED.getCode().equals(session.getStatus())) {
//            //生成token
//            Member member = this.getById(session.getUserId());
//            if (member == null) {
//                throw new ServiceException(ResultCode.USER_NOT_EXIST);
//            } else {
//                //生成token
//                Token token = memberTokenGenerate.createToken(member, false);
//                result.setToken(token);
//                cache.vagueDel(sessionToken);
//            }
//
//        }
//        return result;
//    }
//
//    /**
//     * 检测会员
//     *
//     * @param userName    会员名称
//     * @param mobilePhone 手机号
//     */
//    private void checkMember(String userName, String mobilePhone) {
//        //判断手机号是否存在
//        if (findMember(mobilePhone, userName) > 0) {
//            throw new ServiceException(ResultCode.USER_EXIST);
//        }
//    }

}
